Skip to content

[fix](fe) Fix view columns losing colUniqueId in lazy materialization#62533

Merged
englefly merged 4 commits intoapache:masterfrom
englefly:lazy_mat_view
Apr 17, 2026
Merged

[fix](fe) Fix view columns losing colUniqueId in lazy materialization#62533
englefly merged 4 commits intoapache:masterfrom
englefly:lazy_mat_view

Conversation

@englefly
Copy link
Copy Markdown
Contributor

What problem does this PR solve?

When querying columns through a view with TopN + lazy materialization,
SlotReference.withOneLevelTableAndColumnAndQualifier() incorrectly replaced
originalColumn with the view's Column object (which has uniqueId=-1).
This caused colUniqueId=-1 in the physical plan, making BE unable to find
the column during the two-phase read (lazy materialize) fetch, resulting in
"returned block with row count 0 not match request row id count" error.

The fix preserves the original base table Column (which carries the correct
uniqueId) instead of overwriting it with the view's Column.

Issue Number: close #xxx

Related PR: #xxx

Problem Summary:

Release note

None

Check List (For Author)

  • Test

    • Regression test
    • Unit Test
    • Manual test (add detailed scripts or steps below)
    • No need to test or manual test. Explain why:
      • This is a refactor/code format and no logic has been changed.
      • Previous test can cover this change.
      • No code files have been changed.
      • Other reason
  • Behavior changed:

    • No.
    • Yes.
  • Does this need documentation?

    • No.
    • Yes.

Check List (For Reviewer who merge this PR)

  • Confirm the release note
  • Confirm test cases
  • Confirm document
  • Add branch pick label

@hello-stephen
Copy link
Copy Markdown
Contributor

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@englefly
Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen
Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 100% (0/0) 🎉
Increment coverage report
Complete coverage report

englefly and others added 3 commits April 16, 2026 13:37
### What problem does this PR solve?

Issue Number: None

Related PR: None

Problem Summary: Fix alias slot metadata propagation so MySQL protocol keeps the one-level view column name instead of falling back to the base-table original column name.

### Release note

None

### Check List (For Author)

- Test: FE unit test
    - Unit Test: ./run-fe-ut.sh --run org.apache.doris.nereids.trees.expressions.ExpressionTest
- Behavior changed: Yes (restores expected MySQL metadata for view columns)
- Does this need documentation: No

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@englefly
Copy link
Copy Markdown
Contributor Author

run buildall

@hello-stephen
Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 100.00% (1/1) 🎉
Increment coverage report
Complete coverage report

@englefly
Copy link
Copy Markdown
Contributor Author

run cloud_p0

@hello-stephen
Copy link
Copy Markdown
Contributor

FE Regression Coverage Report

Increment line coverage 0.15% (1/661) 🎉
Increment coverage report
Complete coverage report

@englefly
Copy link
Copy Markdown
Contributor Author

/review

Copy link
Copy Markdown
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes because the PR only fixes one of the two MySQL metadata paths.

Finding

  1. Alias.toSlot() now preserves oneLevelColumn, which fixes the normal result-set metadata path that goes through NereidsPlanner -> FieldInfo. But server-side prepared statements still go through PrepareCommand.run() -> StmtExecutor.planPrepareStatementSlots() -> PrepareCommandPlanner (ANALYZED_PLAN) -> StmtExecutor.sendStmtPrepareOK() (fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/PrepareCommand.java:129-139, fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java:1699-1713, fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java:1986-1993). That path still serializes originalTable/originalColumn and ignores the oneLevel* metadata that normal queries use in fe/fe-core/src/main/java/org/apache/doris/nereids/NereidsPlanner.java:656-676, so useServerPrepStmts=true still exposes base-table metadata for view columns.

Critical checkpoints

  • Goal of the task: Partially accomplished. The lazy-materialization fix looks correct, and the normal result-set metadata path looks fixed. The view-metadata goal is still unmet for COM_STMT_PREPARE.
  • Is the change small and focused: Yes.
  • Concurrency: Not involved.
  • Lifecycle/static initialization: Not involved.
  • Configuration: No new config.
  • Compatibility/storage format: No compatibility or storage-format change.
  • Parallel code paths: Not fully handled. The prepared-statement metadata path was not updated.
  • Special conditional checks: No new risky conditionals.
  • Test coverage: Incomplete. The new lazy-materialization regression is good, but there is no useServerPrepStmts=true regression for view metadata.
  • Observability: Not applicable.
  • Transaction/persistence/data writes: Not involved.
  • FE-BE variable passing: Not applicable for this change.
  • Performance: Neutral.
  • Other issues: None beyond the blocking prepared-statement path.

@github-actions github-actions bot added the approved Indicates a PR has been approved by one committer. label Apr 17, 2026
@github-actions
Copy link
Copy Markdown
Contributor

PR approved by at least one committer and no changes requested.

@englefly englefly closed this Apr 17, 2026
@englefly englefly reopened this Apr 17, 2026
@englefly englefly dismissed github-actions[bot]’s stale review April 17, 2026 03:44

prepare stmt的bug不在这个pr的修改范畴,如果有bug,另外开pr fix

@englefly englefly merged commit 742c046 into apache:master Apr 17, 2026
49 of 50 checks passed
github-actions bot pushed a commit that referenced this pull request Apr 17, 2026
…#62533)

### What problem does this PR solve?

When querying columns through a view with TopN + lazy materialization,
SlotReference.withOneLevelTableAndColumnAndQualifier() incorrectly
replaced
originalColumn with the view's Column object (which has uniqueId=-1).
This caused colUniqueId=-1 in the physical plan, making BE unable to
find
the column during the two-phase read (lazy materialize) fetch, resulting
in
"returned block with row count 0 not match request row id count" error.
    
The fix preserves the original base table Column (which carries the
correct
    uniqueId) instead of overwriting it with the view's Column.
github-actions bot pushed a commit that referenced this pull request Apr 17, 2026
…#62533)

### What problem does this PR solve?

When querying columns through a view with TopN + lazy materialization,
SlotReference.withOneLevelTableAndColumnAndQualifier() incorrectly
replaced
originalColumn with the view's Column object (which has uniqueId=-1).
This caused colUniqueId=-1 in the physical plan, making BE unable to
find
the column during the two-phase read (lazy materialize) fetch, resulting
in
"returned block with row count 0 not match request row id count" error.
    
The fix preserves the original base table Column (which carries the
correct
    uniqueId) instead of overwriting it with the view's Column.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by one committer. dev/4.0.x dev/4.1.x

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants